/way1: 暴力求解
//时间复杂度 O(n^2)  空间复杂度O(10
int removeElement(int* nums, int numsSize, int val){
    for(int i=0;i<numsSize;i++)
    {
        if(nums[i]==val)
        {
            for(int j=i;j<numsSize-1;j++)
            {
                nums[j]=nums[j+1];
            }
            i--;
            numsSize--;
        }
    }
    return numsSize;
}

//way2: 双指针
//时间复杂度 O(n) 空间复杂度O(1)
int removeElement(int* nums, int numsSize, int val){
    int src=0;
    int dst=0;
    for(int i=0;i<numsSize;i++)
    {
        if(nums[src]!=val)
        {
            nums[dst++]=nums[src++];
        }
        else
        {
            src++;
        }
    }
    return dst;
}
//way:3
/*
    解题思路:
        1. 设置一个变量count，用来记录nums中值等于val的元素的个数
        2. 遍历nums数组，对于每个元素进行如下操作：
            a. 如果num[i]等于val，说明值为val的元素出现了一次，count++
            b. 如果nums[i]不等于元素，将nums[i]往前搬移count个位置
                因为nums[i]元素之前出现过count个值等于val的元素，已经被删除了
                因此次数需要将nums[i]往前搬移
        3. 返回删除之后新数组中有效元素个数
        
    时间复杂度：O(N)   空间复杂度：O(1)
 */
int removeElement(int* nums, int numsSize, int val){
    int count = 0;
    for(int i = 0; i < numsSize; ++i)
    {
        if(nums[i] == val)
        {
            count++;
        }
        else
        {
            nums[i-count] = nums[i];
        }
    }


    return numsSize - count;
}